package com.nari.ncps.screen.config;


import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.media.ObjectSchema;
import io.swagger.v3.oas.models.tags.Tag;
import org.springdoc.core.models.GroupedOpenApi;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

@Configuration
public class SwaggerConfig {

    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI()
                .info(new Info()
                        .title("API文档")
                        .version("1.0")
                        .description("API接口文档"))
                .addTagsItem(new Tag().name("全产业一体化").description("全产业一体化"))
                .addTagsItem(new Tag().name("煤炭产业").description("煤炭产业"))
                .addTagsItem(new Tag().name("铝业产业").description("铝业产业"))
                .addTagsItem(new Tag().name("火电产业").description("火电产业"))
                .addTagsItem(new Tag().name("路港生产经营").description("路港生产经营"))
                .addTagsItem(new Tag().name("新能源产业").description("新能源产业"))

                .addTagsItem(new Tag().name("应急-全产业一体化").description("全产业一体化"))
                .addTagsItem(new Tag().name("应急-煤炭产业").description("煤炭产业"))
                .addTagsItem(new Tag().name("应急-铝业产业").description("铝业产业"))
                .addTagsItem(new Tag().name("应急-火电产业").description("火电产业"))
                .addTagsItem(new Tag().name("应急-路港生产经营").description("路港生产经营"))
                .addTagsItem(new Tag().name("应急-新能源产业").description("新能源产业"))

                //支持文件上传
                .components(new Components()
                        .addSchemas("MultipartFile", new ObjectSchema()
                                .type("string")
                                .format("binary")
                                .description("文件上传")));

        /*
            none：不展开任何部分
            list：只展开标签列表，但不展开操作
            full：展开所有（默认）
        */
    }

    @Bean
    public GroupedOpenApi publicApi() {

        return GroupedOpenApi.builder()
                .group("all")
                .pathsToMatch("/**")
                .addOpenApiCustomizer(openApi -> {
                    // 自定义排序逻辑
                    openApi.setTags(openApi.getTags().stream()
                            .sorted((tag1, tag2) -> {
                                // 按照您想要的顺序排序
                                Map<String, Integer> orderMap = new HashMap<>() {{
                                    put("全产业一体化", 1);
                                    put("煤炭产业", 2);
                                    put("铝业产业", 3);
                                    put("火电产业", 4);
                                    put("路港生产经营", 5);
                                    put("新能源产业", 6);
                                    put("应急-全产业一体化", 7);
                                    put("应急-煤炭产业", 8);
                                    put("应急-铝业产业", 9);
                                    put("应急-火电产业", 10);
                                    put("应急-路港生产经营", 11);
                                    put("应急-新能源产业", 12);
                                }};
                                return orderMap.getOrDefault(tag1.getName(), 99)
                                        .compareTo(orderMap.getOrDefault(tag2.getName(), 99));
                            })
                            .collect(Collectors.toList()));
                })
                .build();
    }
}
